﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaBCL;
using ForrajeriaDB;
using System.Data;

namespace ForrajeriaFRONT.ABM
{
    public partial class Forraje : System.Web.UI.Page
    {
        private ForrajeBCL objBC;
        private ForrajeMO objEditar;
        private AnimalXForrajeMO objDetalle;
        private AnimalBCL gestorAnimales = new AnimalBCL();


        public Forraje() //constructor
        {
            objBC = new ForrajeBCL();


        }

        protected void Page_Load(object sender, EventArgs e)
        {
            

            if (!Page.IsPostBack)
            {
                ((Label)this.Master.FindControl("lblTitulo")).Text = "Forrajes";
                
                MarcaBCL objMarca = new MarcaBCL();
                List<MarcaMO> listaMarca = objMarca.GetAll();
                ddlMarca.Items.Add(new ListItem("---Seleccione---", "0"));
                ddlMarca2.Items.Add(new ListItem("---Seleccione---", "0"));
                foreach (MarcaMO aux in listaMarca)
                {
                    ddlMarca2.Items.Add(new ListItem(aux.Nombre, aux.CodigoMarca.ToString()));
                    ddlMarca.Items.Add(new ListItem(aux.Nombre, aux.CodigoMarca.ToString()));
                }

                EdadesBCL objEdades = new EdadesBCL();
                List<EdadesMO> listaEdades = objEdades.GetAll();
                ddlEdad.Items.Add(new ListItem("---Seleccione---", "0"));
                ddlEdad2.Items.Add(new ListItem("---Seleccione---", "0"));
                foreach (EdadesMO aux in listaEdades)
                {
                    ddlEdad.Items.Add(new ListItem(aux.Descripcion.ToString(), aux.CodigoEdad.ToString()));
                    ddlEdad2.Items.Add(new ListItem(aux.Descripcion.ToString(), aux.CodigoEdad.ToString()));
                }
                
                AnimalBCL objAnimal = new AnimalBCL();
                List<AnimalMO> listaAnimal = objAnimal.GetAll();
                chkAnimales.DataSource = listaAnimal;
                chkAnimales.DataTextField = "Nombre";
                chkAnimales.DataValueField = "CodigoAnimal";
                chkAnimales.DataBind();

                ddlAnimal.Items.Add(new ListItem("---Seleccione---", "0"));
                foreach (AnimalMO aux in listaAnimal)
                {
                    ddlAnimal.Items.Add(new ListItem(aux.Nombre, aux.CodigoAnimal.ToString()));
                }
                cargarPanelInicio();
                 //cargaPanelBusqueda();
                 
            }



        }
        protected void cargaPanelCarga()
        {
            panelInicio.Visible = true;
            panelCarga.Visible = true;
            panelBusca.Visible = false;
            panelInforme.Visible = false;
        }

        protected void cargaPanelBusqueda()
        {
            panelInicio.Visible = true;
            panelBusca.Visible = true;
            panelCarga.Visible = false;
            panelInforme.Visible = false;
        }
        public void cargarPanelInicio()
        {
            panelInicio.Visible = true;
            panelBusca.Visible = false;
            panelCarga.Visible = false;
            panelInforme.Visible = false;
        }
        public void cargarPanelInforme()
        {
            panelInicio.Visible = true;
            panelBusca.Visible = false;
            panelCarga.Visible = false;
            panelInforme.Visible = true;

        }

        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;
                case "busqueda":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    mensaje.Visible = false;
                    break;
                case "edicion":
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;

                case "bloqueado":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    break;
            }
        }

        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }

        public void ControlState(ControlCollection controles, Boolean estado)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Enabled = estado;
                else if (control is DropDownList)
                    ((DropDownList)control).Enabled = estado;
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).Enabled = estado;
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).Enabled = estado;
                else if (control is RadioButton)
                    ((RadioButton)control).Enabled = estado;
                else if (control is CheckBox)
                    ((CheckBox)control).Enabled = estado;
                else if (control.HasControls())
                    ControlState(control.Controls, estado);
            }
        }

        
        protected void cmbMarca_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void chkAnimales_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            

            //modoVentana("nuevo");
            ViewState["objEditar"] = null;

            cargaPanelCarga();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            cargarLista();
        }

        private void cargarLista()
        {

            string nombre = null;
            string edad = null;
            string marca = null;
            string animal = null;



            if (!String.IsNullOrWhiteSpace(txtNombre2.Text))
            { nombre = txtNombre2.Text; }

            if (ddlEdad2.SelectedValue != "0")
            {
                edad = ddlEdad2.SelectedValue;
            }

            if (ddlMarca2.SelectedValue != "0")
            {
                marca = ddlMarca2.SelectedValue;
            }
            if (ddlAnimal.SelectedValue != "0")
            {
                animal = ddlAnimal.SelectedValue;
            }

            gridDatos.DataSource = null;

            DataTable dt = objBC.buscarConFiltros(nombre, edad, marca, animal);
            gridDatos.DataSource = dt;
            gridDatos.DataBind();


            modoVentana("nuevo");
        }


        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
        }

        protected void btnVolver_Click(object sender, EventArgs e)
        {
            cargaPanelBusqueda();
        }

        protected void gridDatos_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {

                double asd;
                objEditar = new ForrajeMO();
                int i = e.NewSelectedIndex;
                
                objEditar.CodigoForraje = Int32.Parse(gridDatos.DataKeys[i].Values["codigoForraje"].ToString());
            
                objEditar.Descripcion =gridDatos.DataKeys[i].Values["descripcionForraje"].ToString();
                objEditar.NombreForraje = gridDatos.Rows[i].Cells[0].Text;
                objEditar.StockActual =Double.Parse( gridDatos.DataKeys[i].Values["stock"].ToString());

                if (double.TryParse( gridDatos.DataKeys[i].Values["stockMinimo"].ToString(), out asd))
                    objEditar.StockMinimo = asd;

                if (double.TryParse( gridDatos.DataKeys[i].Values["stockMaximo"].ToString(), out asd))
                    objEditar.StockMaximo = asd;

                objEditar.CodigoEdad = Int32.Parse( gridDatos.DataKeys[i].Values["codigoEdad"].ToString());

                if (double.TryParse( gridDatos.Rows[i].Cells[4].Text, out asd))
                    objEditar.Peso = asd;

                objEditar.Estado = "A";
                objEditar.CodigoMarca = int.Parse(gridDatos.DataKeys[i].Values["codigoMarca"].ToString());
                objEditar.PrecioXKilo = double.Parse(gridDatos.Rows[i].Cells[5].Text);
            
                ViewState["objEditar"] = objEditar;

                txtDescripcion.Text = objEditar.Descripcion;
                txtNombre.Text = objEditar.NombreForraje;
                txtPeso.Text = objEditar.Peso.ToString();
                txtStockActual.Text = objEditar.StockActual.ToString();
                txtStockMaximo.Text = objEditar.StockMaximo.ToString();
                txtStockMinimo.Text = objEditar.StockMinimo.ToString();
                ddlEdad.SelectedValue = objEditar.CodigoEdad.ToString();
               ddlMarca.SelectedValue = objEditar.CodigoMarca.ToString();
                txtprecio.Text = objEditar.PrecioXKilo.ToString();

                panelCarga.Visible = true;
                panelBusca.Visible = false;
                List<AnimalMO> listaCheck = new List<AnimalMO>();
                listaCheck = objBC.getDetalle(objEditar);

                for (int ix = 0; ix < chkAnimales.Items.Count; ix++)
                {

                    foreach (AnimalMO aux in listaCheck)
                    {
                        if (aux.CodigoAnimal == int.Parse(chkAnimales.Items[ix].Value.ToString()))
                        {
                            chkAnimales.Items[ix].Selected = true;

                        }

                    }
                }
            }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {

                objEditar = (ForrajeMO)ViewState["objEditar"];
                if (objEditar == null)//INSERT nuevo
                {
                    objEditar = new ForrajeMO();


                    objEditar.Descripcion = txtDescripcion.Text;
                    objEditar.NombreForraje = txtNombre.Text;

                    if (String.IsNullOrWhiteSpace(txtPeso.Text))
                        objEditar.Peso = null;
                    else
                        objEditar.Peso = double.Parse(txtPeso.Text);

                    objEditar.StockActual = double.Parse(txtStockActual.Text);

                    if (String.IsNullOrWhiteSpace(txtStockMinimo.Text))
                        objEditar.StockMinimo = 0;
                    else
                        objEditar.StockMinimo = double.Parse(txtStockMinimo.Text);

                    if (String.IsNullOrWhiteSpace(txtStockMaximo.Text))
                        objEditar.StockMaximo = null;
                    else
                        objEditar.StockMaximo = double.Parse(txtStockMaximo.Text);


                    objEditar.CodigoEdad = int.Parse(ddlEdad.SelectedValue);
                    objEditar.CodigoMarca = int.Parse(ddlMarca.SelectedValue);
                    objEditar.PrecioXKilo = double.Parse(txtprecio.Text);
                    objEditar.Estado = "A";

                    //***************************************** DETALLE DE FORRAJE ANIMAL *******************************************************************
                    List<AnimalXForrajeMO> listaDetalle = new List<AnimalXForrajeMO>();
                    for (int i = 0; i < chkAnimales.Items.Count; i++)
                    {
                        if (chkAnimales.Items[i].Selected)
                        {
                            objDetalle = new AnimalXForrajeMO();
                            objDetalle.CodigoAnimal = int.Parse(chkAnimales.Items[i].Value);
                            objDetalle.CodigoForraje = 0; //porque en este punto el valor del Forraje es nulo 
                            listaDetalle.Add(objDetalle);
                            objDetalle = null;
                        }
                    }
                    //******************************************** FIN DETALLE *******************************************************************************
                    string resu;
                    resu = objBC.AdicionarConDetalle(objEditar, listaDetalle);

                    if (resu == "1")
                    {
                        mensaje.ForeColor = System.Drawing.Color.Blue;
                        valSumary.ShowSummary = true;
                        mensaje.Text = "Guardado con Exito";

                    }
                    else
                    {
                        mensaje.ForeColor = System.Drawing.Color.Red;
                        valSumary.ShowSummary = true;
                        mensaje.Text = resu;

                    }

                }
                else //update
                {
                    ForrajeMO objActual = new ForrajeMO();

                    objActual.CodigoForraje = objEditar.CodigoForraje;

                    objActual.Descripcion = txtDescripcion.Text;
                    objActual.NombreForraje = txtNombre.Text;

                    if (String.IsNullOrWhiteSpace(txtPeso.Text))
                        objActual.Peso = null;
                    else
                        objActual.Peso = double.Parse(txtPeso.Text);

                    objActual.StockActual = double.Parse(txtStockActual.Text);

                    if (String.IsNullOrWhiteSpace(txtStockMinimo.Text))
                        objActual.StockMinimo = 0;
                    else
                        objActual.StockMinimo = double.Parse(txtStockMinimo.Text);

                    if (String.IsNullOrWhiteSpace(txtStockMaximo.Text))
                        objActual.StockMaximo = null;
                    else
                        objActual.StockMaximo = double.Parse(txtStockMaximo.Text);

                    objActual.CodigoEdad = int.Parse(ddlEdad.SelectedValue);
                    objActual.CodigoMarca = int.Parse(ddlMarca.SelectedValue);
                    objActual.PrecioXKilo = double.Parse(txtprecio.Text);
                    objActual.Estado = "A";
                    //***************************************** DETALLE DE FORRAJE ANIMAL *******************************************************************
                    List<AnimalXForrajeMO> listaDetalle = new List<AnimalXForrajeMO>();
                    for (int i = 0; i < chkAnimales.Items.Count; i++)
                    {
                        if (chkAnimales.Items[i].Selected)
                        {
                            objDetalle = new AnimalXForrajeMO();
                            objDetalle.CodigoAnimal = int.Parse(chkAnimales.Items[i].Value);
                            objDetalle.CodigoForraje = objEditar.CodigoForraje;
                            listaDetalle.Add(objDetalle);
                            objDetalle = null;
                        }
                    }
                    //******************************************** FIN DETALLE *******************************************************************************

                    string resu;
                    resu = objBC.ActualizarConDetalle(objActual, objEditar, listaDetalle);
                    if (resu == "1")
                    {
                        mensaje.ForeColor = System.Drawing.Color.Blue;
                        valSumary.ShowSummary = true;
                        mensaje.Text = "Guardado con Exito";

                    }
                    else
                    {
                        mensaje.ForeColor = System.Drawing.Color.Red;
                        valSumary.ShowSummary = true;
                        mensaje.Text = resu;

                    }


                }
                ViewState["objEditar"] = null;
                modoVentana("nuevo");
                mensaje.Visible = true;

            }
           
        }

       

        protected void gridDatos_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //objEditar = (ForrajeMO)ViewState["objEditar"];
            objEditar = new ForrajeMO();
            objEditar.CodigoForraje =Int32.Parse( gridDatos.DataKeys[e.RowIndex].Values["codigoForraje"].ToString());
            if (objEditar != null)
            {
                string resu = objBC.Eliminar(objEditar);
                if (resu == "1")
                {
                    mensaje.Text = "Eliminado Correctamente";
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;
                }
            }
            else
            {
                mensaje.ForeColor = System.Drawing.Color.Red;
                valSumary.ShowSummary = true;
                mensaje.Text = "Debe seleccionar algo para eliminar";
            }

            modoVentana("nuevo");
            mensaje2.Visible = true;
            cargarLista();

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            int? animal = null;
            float? stock = null;
            string estado = null;

            if(!string.IsNullOrEmpty(txtStockActualInforme.Text)) stock = float.Parse(txtStockActualInforme.Text);
            if(!string.IsNullOrEmpty(txtEstadoInforme.Text)) estado = txtEstadoInforme.Text;
            if( ddlAnimalInforme.SelectedValue!="0") animal=int.Parse(ddlAnimalInforme.SelectedValue);
            try 
            {
                DataTable dt = objBC.getInformeForraje(animal,stock,estado);
                grdInformeForraje.DataSource=dt;
                grdInformeForraje.DataBind();
            }
            catch (Exception ex)
            {
                mensajeInforme.Text= ex.Message;
            }
            
        }

        public void cargarAnimalesInforme()
        {
            ddlAnimalInforme.Items.Clear();
            ddlAnimalInforme.Items.Add(new ListItem("---Seleccione---", "0"));

            List<AnimalMO> animales = new List<AnimalMO>();
            animales = gestorAnimales.GetAll();
            foreach (AnimalMO aux in animales)
            {
                ddlAnimalInforme.Items.Add(new ListItem(aux.Nombre, aux.CodigoAnimal.ToString()));
            }

        }

        protected void btnInforme_Click(object sender, EventArgs e)
        {
            cargarPanelInforme();
            cargarAnimalesInforme();
        }
                
        


        
    }
}